/**
 * @addtogroup base64.h
 * base64.h
 * @{
 */
/**
 * @file         ofc_base64.h
 * @brief        Base64编解码库 
 * @author       Leo
 * @date         2020-02-07
 * @version      1.3
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2018-11-16  <td>1.0                   <td>Leo             <td>创建初始版本
 * <tr><td>2019-09-20  <td>1.1                   <td>Akee            <td>从Rfc库移植过来
 * <tr><td>2019-11-14  <td>1.2                   <td>Leo             <td>去掉TMfString类型,改成存内存编解码格式
 * <tr><td>2020-02-07  <td>1.3                   <td>Akee            <td>修复当参数错误时返回尺寸错误的问题
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _OFC_BASE64_H_
#define _OFC_BASE64_H_

#include "ofc_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Base64编码
 * @param src: 要编码的数据
 * @param length: src的长度
 * @param buf: 存储编码结果的缓冲区(如果为NULL,函数返回需要的缓冲区长度)
 * @param buf_size: 缓冲区大小(如果为<=0,函数返回需要的缓冲区长度)
 * @return 返回编码后的长度; 如果缓冲区大小不够,返回0
 * @note 
 *   - 若buf为NULL,返回值为需要的缓冲区的长度
 *   - 若buf_size<=0,返回值为需要缓冲区的长度
 */
Int32 OfBase64Encode(const char *src, Int32 length, char *buf, Int32 buf_size);

/**
 * Base64解码
 * @param src: 要解码的数据
 * @param length: src的长度
 * @param buf: 存储解码结果的缓冲区(如果为NULL,函数返回需要的缓冲区大小)
 * @param buf_size: 缓冲区大小(如果为<=0,函数返回需要的缓冲区长度)
 * @return 返回解码后的长度; 如果缓冲区大小不够,返回0
 * @note 
 *   - 若buf为NULL,返回值为需要的缓冲区的长度
 *   - 若buf_size<=0,返回值为需要缓冲区的长度
 */
Int32 OfBase64Decode(const char *src, Int32 length, char *buf, Int32 buf_size);

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // _OFC_BASE64_H_

/**
 * @}
 */
